// 导入操作token的方法
import { setToken, removeToken, getToken, setTimeStamp } from '@/utils/auth'
import { loginApi, getInfoApi, getBaseInfoApi } from '@/api/user'
const state = {
  // 因为在vuex中，token刷新页面后会清除，但是实际应用中，需要保存
  // 因此 我们借助cookie保存时间长的优势，如果页面刷新，可以先尝试从cookie中取token
  token: getToken() || '',
  // 保存用户信息
  userInfo: {}
}
const mutations = {
  // 存储token
  setToken (state, payload) {
    // vuex中(内存中)
    state.token = payload
    // 同时给cookie存上token(浏览器中)
    setToken(payload)
    // 扩展，将token保存时的时间戳记录下来
    setTimeStamp()
  },
  // 删除
  removeToken (state) {
    state.token = ''
    removeToken()
  },
  // 保存用户信息
  setUserInfo (state, payload) {
    state.userInfo = payload
  },
  // 删除用户信息
  removeUserInfo (state) {
    state.userInfo = {}
  }
}
const actions = {
  // 完成登录，保存状态(token)
  async login (ctx, payload) {
    try {
      const res = await loginApi(payload)
      // 得到token
      console.log(res)
      // const token = res.data.data
      // 因为响应拦截器接收到数据添加了一个.data帮我们解开了一层,我们这边就可以少写一个data
      const token = res.data
      ctx.commit('setToken', token)
    } catch (error) {
      return Promise.reject(error)
    }
  },
  // 获取用户信息
  async getUserInfo (ctx, payload) {
    // 发送请求得到用户信息
    try {
      const res = await getInfoApi()
      // 获取员工信息(有头像)
      const baseRes = await getBaseInfoApi(res.data.userId)
      // 把这两个用户信息合并
      const result = { ...res.data, ...baseRes.data }
      // 得到用户信息(不包含头像)
      ctx.commit('setUserInfo', result)
      return result
    } catch (err) {
      return Promise.reject(err)
    }
  }
}
export default {
  namespaced: true,
  // 管理状态
  state,
  // 修改状态
  mutations,
  // 处理异步
  actions
}